package com.library.books.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.library.books.domain.BooksBorrow;
import com.library.books.domain.vo.BooksJoinBorrowActive;
import com.library.books.domain.vo.BorrowJoinBooksMultiInfo;
import com.library.books.domain.vo.borrow.BooksJoinBorrowRecord;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 借阅Mapper接口
 *
 * @author hb
 * @date 2024-10-14
 */
public interface BooksBorrowMapper extends BaseMapper<BooksBorrow>
{
    /**
     * 查询借阅列表
     *
     * @param booksBorrow 借阅
     * @return 借阅集合
     */
    List<BooksBorrow> selectBooksBorrowList(BooksBorrow booksBorrow);

    /**
     * 根据RFID查询借阅（待归还）记录列表
     *
     * @param rfid rfid集合
     * @return 借阅集合
     */
    List<BooksJoinBorrowRecord> selectBooksBorrowListByRfid(@Param("rfid") List<String> rfid);

    /**
     * 根据索书号查询待归还
     *
     * @param license 索书号
     * @return 借阅集合
     */
    BooksJoinBorrowRecord selectBooksBorrowListByLicense(String license);

    /**
     * 根据rfid查询可借阅书籍记录列表
     *
     * @param rfid rfid集合
     * @return 借阅集合
     */
    List<BooksJoinBorrowActive> selectBooksActiveBorrowListByRfid(List<String> rfid);

    /**
     * 查询逾期记录列表
     *  - 查询逾期的待归还记录
     *
     * @return 逾期集合
     */
    List<BooksJoinBorrowRecord> selectBooksBorrowBeOverdueList(BooksJoinBorrowRecord booksJoinBorrowRecord);

    /**
     * 查询书籍借出待归还列表
     *
     * @return 借阅集合
     */
    List<BooksJoinBorrowRecord> selectBooksBorrowLendList(BooksJoinBorrowRecord booksJoinBorrowRecord);

    /**
     * 查询逾期记录数量
     *  - 将分组去掉了，直接查逾期总数
     * @return 逾期数量
     */
    Long selectBooksBorrowBeOverdueCount(BooksJoinBorrowRecord booksJoinBorrowRecord);

    /**
     * 查询书籍借阅记录数量
     * @param booksJoinBorrowRecord
     * @return
     */
    Long selectBooksBorrowBeLendCount(BooksJoinBorrowRecord booksJoinBorrowRecord);

    /**
     * 根据借阅id查询书籍等信息
     *  - 书籍信息（主要）
     *  - 规则信息
     *  - 书架信息
     *  - 产生的记录信息（主要）
     *  # 看记录信息而已，不用判断删除
     */
    BorrowJoinBooksMultiInfo selectBorrowJoinBooksMultiInfoByBorrowId(Long borrowId);

    /**
     * 批量添加借阅信息
     *  - 需要借阅 id
     * @param booksBorrowList 借阅信息（只用借阅部分信息）
     * @return 主要通过新增set借阅id到列表中
     */
    boolean batchSaveBooksBorrows(List<BooksJoinBorrowRecord> booksBorrowList);
}
